package com.opcode.nebulamobil.base.activities;

import android.os.Bundle;
import com.opcode.nebulamobil.base.components.steptracking.PipelineManager;
import com.opcode.nebulamobil.base.fragments.FragmentBase;
import com.opcode.nebulamobil.information.dataforms.costadataforms.TableDataForm;
import com.opcode.nebulamobil.information.requests.JSONRequest;
import com.opcode.nebulamobil.information.responses.JSONResponse;



/**
 * İçerisinde birden fazla fragment bulunduran ve bu fragmentların yönetilmesini sağlayan üst yapıdır.
 * Böylece çoğu zaman ihtiyaç duyacaımız pipeline yapılarını bu aktivitenin alt sınıfı olan sınıflara yazacağız.
 * @author Okan ERDOĞAN
 *
 * 8 Eyl 2014
 */
public abstract class MultiFragmentActivityBase extends FragmentActivityBase{

	private PipelineManager pipelineManager;

	 /**
		 * Bu metoda parametre olarak verilen PipelineManager nesnesinden fragment'imizin içerisine eklenmesini istediğimiz 
		 * layout bilgilerini alırız. Ayrıca yine parametre olarak bir targetFragment nesnesi alırız. Bu nesne de bize
		 * hangi fragmenti ilgili layouta eklememiz gerektiğini söyler.
		 * @param pipelineManager
		 * @param targetFragment
		 */
		public void pipelineForward(PipelineManager pipelineManager,FragmentBase targetFragment){
			this.pipelineManager=pipelineManager;
			fragmentManager.beginTransaction().add(pipelineManager.getContainerViewId(), targetFragment).commit();	
		}
		
		    
		/**
		 * Bir sonraki fragment açılırken bir request veya response objesini almasını sağlar.
		 * Böylece açılan fragment bazı önbilgilerle donatılmış şekilde açılır.
		 * @param pipelineManager
		 * @param targetFragment
		 * @param request
		 * @param response
		 */
		public void pipelineForwardWithRequestObject(PipelineManager pipelineManager,FragmentBase targetFragment,JSONRequest request,JSONResponse response){
			Bundle arguments = new Bundle();
		    arguments.putSerializable("REQUEST_OBJECT", request);
		    arguments.putSerializable("RESPONSE_OBJECT", response);
		    targetFragment.setArguments(arguments);
			this.pipelineManager=pipelineManager;
			this.fragmentManager.beginTransaction().add(pipelineManager.getContainerViewId(), targetFragment).commit();	
		} 
		
		/**
		 * Bu metod parametre olarak bir TableDataForm alır. Bu dataForm içerisinde seçili olarak gelen Aktif Masa bulunmaktadır.
		 * Bu metoda sipariş ekle ve 
		 * @param pipelineManager
		 * @param targetFragment
		 * @param tableDataForm
		 */
		public void pipelineForward(PipelineManager pipelineManager,FragmentBase targetFragment,TableDataForm tableDataForm){
			this.pipelineManager=pipelineManager;
			//targetFragment.setInitialDataForm(tableDataForm);
			this.fragmentManager.beginTransaction().add(pipelineManager.getContainerViewId(), targetFragment).commit();	
		}
		
		
		public void removeFragmentFromPipeline(PipelineManager pipelineManager,FragmentBase targetFragment){	
			this.fragmentManager.beginTransaction().remove(targetFragment).commit();	
		}
		
		
		
		public PipelineManager getPipelineManager() {
			return this.pipelineManager;
		}
		public void setPipelineManager(PipelineManager pipelineManager) {
			this.pipelineManager = pipelineManager;
		}

}
